package module.scene.cmds
{
	import com.darwin.darwinMVC.mvc.Command;
	
	/**
	 *	场景控制层抛出的命令
	 * @author Roland
	 * 
	 */
	public class SceneCommand extends Command
	{
		//=========场景物件动作命令==================
		/**
		 *	 当某个物品被摆放到场景中后场景控制器会抛出此命令,target为被摆放的物件iso
		 */
		public static const SCENE_ACTION_ADD:String = "actionAdd";
		
		/**
		 *	当某个物体被移动时场景控制器会抛出此命令,target为被移动的物件iso
		 */
		public static const SCENE_ACTION_MOVE:String = "actionMove";
		
		/**
		 *	当某个物件被拆除之后场景控制器会抛出此命令,target为被拆除的物件iso
		 */
		public static const SCENE_ACTION_REMOVE:String = "actionRemove";	
		
//		/**
//		 *  撤销某个场景动作,data为一个SceneCommand命令的数组,场景控制器收到此命令后会依次撤销对应的操作
//		 */
//		public static const SCENE_ACTION_REVERT:String = "actionTevert";
		//===========================================
		/**
		 *	更改场景中某组iso的isoDataObj以及dataObj的属性，此命令会触发对应iso的set isoDataObj和set dataObj方法
		 * 命令参数：
		 * data = [{eId:"要修改的iso的eId",isoDataObj:{"参数名1":参数值1},dataObj:{"参数名2":参数值2}}]
		 * 
		 * 例子：如命令中data为如下内容 {eId:"123456",isoDataObj:{"walkable":0},dataObj:{"completeTime":10000}}
		 * 则场景控制器收到此命令后会将eId为123456的isoObject对象取出，修改isoDataObj中walkable属性值为0，并将修改后的isoDataObj设置给isoObject(触发set isoDataObj)方法
		 * dataObj部分同理...
		 */
		public static const SCENE_CMD_MODIFY_ISOOBJECT:String = "modifyIsoObject";
		/**
		 *	当场景开始拖动时抛出此命令
		 */
		public static const SCENE_CMD_STARTDRAG:String = "startDragMap";
		
		/**
		 *	当场景结束拖动时抛出此命令
		 */
		public static const SCENE_CMD_STOPDRAG:String = "stopDragMap";
		
		/**
		 * 当场景上某iso抛出事件，通过此命令进行发布,命令中target为发布命令的iso对象(勿保存),data中event属性为iso抛出的event，其余为iso对象的isoDataObj和dataObj 
		 */
		public static const SCENE_CMD_ISO_DISPATCH_EVENT:String = "isoDispatchEvent";
		
		/**
		 *	当用户点击场景中某个iso的tipNode是抛出此命令，命令中target为被点击的tips的原始对象(UIComponent) ,data包含被点击的tips所属iso的isoDataObj,以及dataObj
		 */
		public static const SCENE_CMD_CLICK_ISOTIPNODE:String = "clickIsotipNode";
		
		/**
		 *	当用户点击场景中某个isoObject时抛出此命令，命令中target参数为被点击对象(JusticeIsoObject),data.point为点击物体相对于屏幕的2d坐标(Point)
		 */
		public static const SCENE_CMD_CLICK_ISO:String = "clickIso";
		
		/**
		 *	 当用户点击场景中空地时抛出此命令，命令中data.position为点中的场景中的格子坐标(IsoPosition)
		 */
		public static const SCENE_CMD_CLICK_SPACE:String = "clickSpace";
		
		/**
		 *	当用户鼠标在场景中按下时抛出此命令， 命令中target参数为被点击对象(如果存在)(JusticeIsoObject)
		 */
		public static const SCENE_CMD_MOUSE_DOWN:String = "mouseDown";
		
		/**	 
		 *	 当用户鼠标在场景中放开时此命令，命令中data.position为鼠标放开时指向的场景格子坐标(IsoPosition)
		 */
		public static const SCENE_CMD_MOUSE_UP:String = "mouseUp";
		
		/**
		 *	 当用户鼠标在场景中移动时此命令，命令中target参数为鼠标下方的对象(如果存在)(JusticeIsoObject),data.point为鼠标下方物体(如果存在)相对于屏幕的2d坐标(Point)
		 */
		public static const SCENE_CMD_MOUSE_MOVE:String = "mouseMove";
		/**
		 *	当场景状态被改变时抛出此命令,命令中的参数actionType标识当前最新的状态
		 */
		public static const SCENE_CMD_ACTIONTYPE_CHANGED:String = "actionTypeChanged";
		
		/**
		 *	己方部队列表发生变化时抛出此命令,命令中参数data为最新部队列表(Array)
		 */
		public static const SCENE_CMD_TROOPLIST_CHANGED:String = "troopListChanged";
		
		/**
		 *	定位部队命令，场景控制器侦听到此命令后会把镜头定位至指定对象 参数data为指定部队的TroopIsoDataObj 
		 */
		public static const SCENE_CMD_LOCATE_TROOP:String = "locateTroop";
		
		/**
		 *	定位到用户所属领地命令 ,场景控制器侦听到此命令后会把镜头定位至用户所属领地
		 */
		public static const SCENE_CMD_LOCATE_HOME:String = "locateHome";
		
		/**
		 *	场景掉落物品，data = {eId:???,type:???,num:???,size:???,x:???,y:???}
		 */
		public static const SCENE_CMD_DROP_ITEM:String = "scene_cmd_drop_item";
		/**
		 *	场景当前的行动模式 
		 */
		public var actionType:String;
		/**
		 *	实例化一个场景命令 
		 * @param cmdName
		 * @param target
		 * 
		 */
		public function SceneCommand(cmdName:String, target:Object=null)
		{
			super(cmdName, target);
		}
	}
}